#!/bin/bash

# 日志目录
LOG_DIR="$(dirname "$0")/log"
PID_FILE="$LOG_DIR/open-webui.pid"

# 启动函数
start() {
    # 检查 PID 文件是否存在
    if [ -f "$PID_FILE" ]; then
        # 读取 PID 文件
        APP_PID=$(cat "$PID_FILE")

        # 检查进程是否存在
        if kill -0 "$APP_PID" 2>/dev/null; then
            echo "Open WebUI 已启动，PID 为 $APP_PID"
            exit 0
        else
            # 如果进程不存在，删除旧的 PID 文件
            echo "发现旧的 PID 文件，但进程未运行，清理中..."
            rm -f "$PID_FILE"
        fi
    fi

    # 加载 Python 虚拟环境
    source /opt/open-webui/.venv/bin/activate

    # 数据目录
    export DATA_DIR='/opt/open-webui/data'

    # 创建日志目录（如果不存在）
    if [ ! -d "$LOG_DIR" ]; then
        mkdir -p "$LOG_DIR"
    fi

    # 日志文件
    LOG_FILE="$LOG_DIR/open-webui.log"

    # 启动 Open WebUI 程序，并将输出重定向到日志文件
    open-webui serve --port 80 >> "$LOG_FILE" 2>&1 &

    # 获取后台进程的 PID
    APP_PID=$!

    # 将 PID 保存到文件
    echo "$APP_PID" > "$PID_FILE"

    # 输出提示信息
    echo "Open WebUI 已启动，PID 为 $APP_PID ，日志文件：$LOG_FILE"
}

# 停止函数
stop() {
    if [ -f "$PID_FILE" ]; then
        # 读取 PID 文件
        APP_PID=$(cat "$PID_FILE")

        # 检查进程是否存在
        if kill -0 "$APP_PID" 2>/dev/null; then
            # 终止进程
            kill "$APP_PID"
            echo "已终止 Open WebUI 进程，PID 为 $APP_PID"
        else
            echo "未找到运行的 Open WebUI 进程，PID 为 $APP_PID"
        fi

        # 删除 PID 文件
        rm -f "$PID_FILE"
    else
        echo "未找到 PID 文件：$PID_FILE"
    fi
}

# 重启函数
restart() {
    stop
    start
}

# 根据参数执行相应操作
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac